package com.idc.resource.controller;

import com.idc.resource.enums.ErrorCodeEnum;
import com.idc.resource.exception.IdcServiceException;
import com.idc.resource.model.UserChildReqDto;
import com.idc.resource.model.UserRegisterReqDto;
import com.idc.resource.model.UserInfoResDto;
import com.idc.resource.service.UserService;
import com.idc.resource.util.LogUtil;
import com.idc.resource.util.Result;
import com.idc.resource.util.VerifyUtil;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RestController;

/**
 * 用户管理
 * Created by Lijing on 2017/7/11.
 */
@Slf4j
@RestController
@RequestMapping(value = "/user")
public class UserController {

    /** 用户服务 */
    @Autowired
    private UserService userService;

    /**
     * 用户注册
     * @param userInfoReqDto 用户注册请求
     * @return 用户注册结果
     */
    @RequestMapping(value = "/register", method = RequestMethod.POST)
    public Result<UserInfoResDto> registerUser(@RequestBody UserRegisterReqDto userInfoReqDto){
        try {
            LogUtil.updateLogId(null);
            log.error("收到一个用户注册请求,请求参数:{}",userInfoReqDto);
            VerifyUtil.validateNoProperties(userInfoReqDto,"ispCer");
            return  new Result<>(userService.register(userInfoReqDto));
        }catch (IdcServiceException ise){
            log.error("用户注册失败，原因:{}",ise.getMessage());
            return  new Result<>(ise.getCode(),ise.getMessage());
        }catch (Exception e){
            log.error("用户注册时系统异常，原因:",e);
            return new Result<>(ErrorCodeEnum.SYSTEM_ERROR.getCode(),ErrorCodeEnum.SYSTEM_ERROR.getDesc());
        }
    }

    /**
     * 创建子用户信息
     * @param userChildReqDto 子用户创建请求
     * @return 子用户创建结果
     */
    @RequestMapping(value = "/register/child", method = RequestMethod.POST)
    public Result<UserInfoResDto> createChildUser(@RequestBody UserChildReqDto userChildReqDto){
        try {
            LogUtil.updateLogId(null);
            log.error("收到一个子用户创建请求,请求参数:{}",userChildReqDto);
            VerifyUtil.validateObject(userChildReqDto);
            return  new Result<>(userService.createChild(userChildReqDto));
        }catch (IdcServiceException ise){
            log.error("子用户创建失败，原因:{}",ise.getMessage());
            return  new Result<>(ise.getCode(),ise.getMessage());
        }catch (Exception e){
            log.error("子用户创建时系统异常，原因:",e);
            return new Result<>(ErrorCodeEnum.SYSTEM_ERROR.getCode(),ErrorCodeEnum.SYSTEM_ERROR.getDesc());
        }
    }

    /**
     * 用户资料修改
     * @param userInfoReqDto 用户资料修改请求
     * @return 用户资料修改结果
     */
    @RequestMapping(value = "/update", method = RequestMethod.POST)
    public Result<UserInfoResDto> updateUser(@RequestBody UserRegisterReqDto userInfoReqDto){
        try {
            LogUtil.updateLogId(null);
            log.error("收到一个用户资料更新请求,请求参数:{}",userInfoReqDto);
            if(userInfoReqDto.getId()== null||userInfoReqDto.getId()==0){
                log.error("用户信息更新失败，需要更新的用户id不能为空");
                return  new Result<>(ErrorCodeEnum.PARAM_ERROR.getCode(),ErrorCodeEnum.PARAM_ERROR.getDesc());
            }
            return  new Result<>(userService.register(userInfoReqDto));
        }catch (IdcServiceException ise){
            log.error("用户注册失败，原因:{}",ise.getMessage());
            return  new Result<>(ise.getCode(),ise.getMessage());
        }catch (Exception e){
            log.error("用户注册时系统异常，原因:",e);
            return new Result<>(ErrorCodeEnum.SYSTEM_ERROR.getCode(),ErrorCodeEnum.SYSTEM_ERROR.getDesc());
        }
    }
}
